diff options
author | Adrian Thurston <thurston@complang.org> | 2012-07-22 11:24:30 -0400 |
---|---|---|
committer | Adrian Thurston <thurston@complang.org> | 2012-07-22 11:24:30 -0400 |
commit | e17612e7f67d4e44f6889d36f21021303154fb3a (patch) | |
tree | 79d9fce7e0ba29239f85530cc0b4f4731c61ed77 | |
parent | d2550313796c4ec7012f5769c66b6d88c7a13a65 (diff) | |
download | colm-e17612e7f67d4e44f6889d36f21021303154fb3a.tar.gz |
added static constructors for LangVarRef and cleaned up those calls
-rw-r--r-- | src/lmparse.kl | 26 | ||||
-rw-r--r-- | src/parsetree.h | 24 | ||||
-rw-r--r-- | src/synthesis.cc | 2 |
3 files changed, 36 insertions, 16 deletions
diff --git a/src/lmparse.kl b/src/lmparse.kl index 6e496c5c..e9019f9d 100644 --- a/src/lmparse.kl +++ b/src/lmparse.kl @@ -207,8 +207,8 @@ global_def: KW_Export var_def opt_def_init $2->objField->isExport = true; if ( $3->expr != 0 ) { - LangVarRef *varRef = new LangVarRef( $2->objField->loc, - new QualItemVect, $2->objField->name ); + LangVarRef *varRef = LangVarRef::cons( $2->objField->loc, + $2->objField->name ); $$->stmt = LangStmt::cons( $2->objField->loc, $3->assignType, varRef, $3->expr ); @@ -234,8 +234,8 @@ global_def: KW_Global var_def opt_def_init object->insertField( $2->objField->name, $2->objField ); if ( $3->expr != 0 ) { - LangVarRef *varRef = new LangVarRef( $2->objField->loc, - new QualItemVect, $2->objField->name ); + LangVarRef *varRef = LangVarRef::cons( $2->objField->loc, + $2->objField->name ); $$->stmt = LangStmt::cons( $2->objField->loc, $3->assignType, varRef, $3->expr ); @@ -676,7 +676,7 @@ nonterm opt_label opt_label: TK_Word ':' final { - $$->varRef = new LangVarRef( $1->loc, new QualItemVect, $1->data ); + $$->varRef = LangVarRef::cons( $1->loc, $1->data ); }; opt_label: final { @@ -1350,8 +1350,8 @@ statement: var_def opt_def_init //cout << "var def " << $1->objField->name << endl; if ( $2->expr != 0 ) { - LangVarRef *varRef = new LangVarRef( $1->objField->loc, - new QualItemVect, $1->objField->name ); + LangVarRef *varRef = LangVarRef::cons( $1->objField->loc, + $1->objField->name ); $$->stmt = LangStmt::cons( $1->objField->loc, $2->assignType, varRef, $2->expr ); @@ -1479,7 +1479,7 @@ iter_call: var_ref '(' opt_code_expr_list ')' iter_call: TK_Word final { $$->langTerm = LangTerm::cons( InputLoc(), LangTerm::VarRefType, - new LangVarRef( $1->loc, new QualItemVect, $1->data ) ); + LangVarRef::cons( $1->loc, $1->data ) ); }; # @@ -1613,7 +1613,7 @@ nonterm var_ref var_ref: qual TK_Word final { - $$->varRef = new LangVarRef( $2->loc, $1->qual, $2->data ); + $$->varRef = LangVarRef::cons( $2->loc, $1->qual, $2->data ); }; nonterm qual @@ -1808,7 +1808,7 @@ code_factor: LangVarRef *varRef = 0; if ( $2->objField != 0 ) - varRef = new LangVarRef( $2->objField->loc, new QualItemVect, $2->objField->name ); + varRef = LangVarRef::cons( $2->objField->loc, $2->objField->name ); $$->expr = LangExpr::cons( LangTerm::cons( $1->loc, LangTerm::ConstructType, varRef, $2->objField, $3->typeRef, $4->fieldInitVect, replacement ) ); @@ -1839,7 +1839,7 @@ code_factor: LangVarRef *varRef = 0; if ( $2->objField != 0 ) - varRef = new LangVarRef( $2->objField->loc, new QualItemVect, $2->objField->name ); + varRef = LangVarRef::cons( $2->objField->loc, $2->objField->name ); NamespaceQual *nspaceQual = new NamespaceQual( namespaceStack.top(), regionStack.top() ); @@ -1883,7 +1883,7 @@ code_factor: LangVarRef *varRef = 0; if ( $2->objField != 0 ) - varRef = new LangVarRef( $2->objField->loc, new QualItemVect, $2->objField->name ); + varRef = LangVarRef::cons( $2->objField->loc, $2->objField->name ); $$->expr = LangExpr::cons( LangTerm::cons( $1->loc, LangTerm::OrigParseType, varRef, $2->objField, $3->typeRef, parserTypeRef, replacement ) ); @@ -1921,7 +1921,7 @@ code_factor: LangVarRef *varRef = 0; if ( $2->objField != 0 ) - varRef = new LangVarRef( $2->objField->loc, new QualItemVect, $2->objField->name ); + varRef = LangVarRef::cons( $2->objField->loc, $2->objField->name ); $$->expr = LangExpr::cons( LangTerm::cons( $1->loc, LangTerm::OrigParseStopType, varRef, $2->objField, $3->typeRef, parserTypeRef, replacement ) ); diff --git a/src/parsetree.h b/src/parsetree.h index 92428a0a..da0346d3 100644 --- a/src/parsetree.h +++ b/src/parsetree.h @@ -2282,8 +2282,28 @@ typedef Vector<QualItem> QualItemVect; struct LangVarRef { - LangVarRef( const InputLoc &loc, QualItemVect *qual, String name ) - : loc(loc), qual(qual), name(name) {} + LangVarRef() + : + qual(0) + {} + + static LangVarRef *cons( const InputLoc &loc, String name ) + { + LangVarRef *l = new LangVarRef; + l->loc = loc; + l->qual = new QualItemVect; + l->name = name; + return l; + } + + static LangVarRef *cons( const InputLoc &loc, QualItemVect *qual, String name ) + { + LangVarRef *l = new LangVarRef; + l->loc = loc; + l->qual = qual; + l->name = name; + return l; + } void resolve( Compiler *pd ) const; diff --git a/src/synthesis.cc b/src/synthesis.cc index fab28449..c9bff5a6 100644 --- a/src/synthesis.cc +++ b/src/synthesis.cc @@ -2139,7 +2139,7 @@ LangTerm *LangStmt::chooseDefaultIter( Compiler *pd, LangTerm *fromVarRef ) cons lookup.uniqueType->typeId == TYPE_PTR ) { /* The iterator name. */ - callVarRef = new LangVarRef( loc, new QualItemVect, "triter" ); + callVarRef = LangVarRef::cons( loc, "triter" ); } else { error(loc) << "there is no default iterator for a " |