summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Thurston <thurston@complang.org>2012-07-22 11:24:30 -0400
committerAdrian Thurston <thurston@complang.org>2012-07-22 11:24:30 -0400
commite17612e7f67d4e44f6889d36f21021303154fb3a (patch)
tree79d9fce7e0ba29239f85530cc0b4f4731c61ed77
parentd2550313796c4ec7012f5769c66b6d88c7a13a65 (diff)
downloadcolm-e17612e7f67d4e44f6889d36f21021303154fb3a.tar.gz
added static constructors for LangVarRef and cleaned up those calls
-rw-r--r--src/lmparse.kl26
-rw-r--r--src/parsetree.h24
-rw-r--r--src/synthesis.cc2
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 "