Skip to content

Commit

Permalink
Typespec & binding patterns - all tests pass
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeremy Clifford committed Aug 9, 2012
1 parent 31305c3 commit 1fc96ab
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 44 deletions.
10 changes: 3 additions & 7 deletions compiler/src/analyzer.cpp
Expand Up @@ -2097,13 +2097,8 @@ StatementAnalysis analyzeStatement(StatementPtr stmt, EnvPtr env, AnalysisContex
return SA_FALLTHROUGH;
}

case BINDING : {
// llvm::errs() << "analyzeBindingStatement\n";
return SA_FALLTHROUGH;

}

case LABEL :
case BINDING :
case ASSIGNMENT :
case INIT_ASSIGNMENT :
case VARIADIC_ASSIGNMENT :
Expand Down Expand Up @@ -2393,7 +2388,8 @@ EnvPtr analyzeBinding(BindingPtr x, EnvPtr env)

for (unsigned i = 0; i < formalArgs.size(); ++i) {
FormalArgPtr y = formalArgs[i];
addLocal(env2, y->name, new PValue(argsKey[i], false));
PVData const &pv = mpv->values[i];
addLocal(env2, y->name, new PValue(pv.type, false));
}
if (x->varg.ptr()) {
MultiPValuePtr varArgs = new MultiPValue();
Expand Down
40 changes: 5 additions & 35 deletions compiler/src/codegen.cpp
Expand Up @@ -4052,8 +4052,8 @@ void codegenCollectLabels(const vector<StatementPtr> &statements,
EnvPtr codegenBinding(BindingPtr x, EnvPtr env, CodegenContext* ctx)
{

if(!x->analyzed)
analyzeBinding(x, env);
// if(!x->analyzed)
// analyzeBinding(x, env);

DebugLocationContext loc(x->location, ctx);

Expand Down Expand Up @@ -4098,7 +4098,7 @@ EnvPtr codegenBinding(BindingPtr x, EnvPtr env, CodegenContext* ctx)
CValuePtr cv = mcv->values[i];
cgPushStackValue(cv, ctx);
addLocal(env2, x->args[i]->name, cv.ptr());
llvm::SmallString<128> buf,tbuf;
llvm::SmallString<128> buf;
llvm::raw_svector_ostream ostr(buf);
ostr << x->args[i]->name->str << ":" << cv->type;
cv->llValue->setName(ostr.str());
Expand Down Expand Up @@ -4138,18 +4138,9 @@ EnvPtr codegenBinding(BindingPtr x, EnvPtr env, CodegenContext* ctx)
}

case REF : {
// llvm::errs() << "codegenBinding:REF\n";
MultiPValuePtr mpv = safeAnalyzeMulti(x->values, env, x->args.size());
MultiCValuePtr mcv = new MultiCValue();
// llvm::errs() << "codegenBinding:REF 2\n";
// for (llvm::StringMap<ObjectPtr>::const_iterator i = env->entries.begin(), end = env->entries.end();
// i != end;
// ++i)
// {
// llvm::errs() << i->first().str() << "\n";
// }
for (unsigned i = 0; i < mpv->values.size(); ++i) {
// llvm::errs() << "codegenBinding:REF 3\n";
PVData const &pv = mpv->values[i];
if (pv.isTemp)
argumentError(i, "ref can only bind to an lvalue");
Expand Down Expand Up @@ -4183,19 +4174,10 @@ EnvPtr codegenBinding(BindingPtr x, EnvPtr env, CodegenContext* ctx)
cgDestroyAndPopStack(marker, ctx, false);
clearTemps(tempMarker, ctx);
EnvPtr env2 = new Env(env);
// llvm::errs() << "codegenBinding:REF 6\n";
// for (llvm::StringMap<ObjectPtr>::const_iterator i = env2->entries.begin(), end = env2->entries.end();
// i != end;
// ++i)
// {
// llvm::errs() << i->first().str() << "\n";
// }
for (unsigned i = 0; i < x->args.size(); ++i) {
// llvm::errs() << "codegenBinding:REF 7a\n";
CValuePtr cv = derefValue(mcv->values[i], ctx);
cgPushStackValue(cv, ctx);
// cgPushStackValue(cv, ctx);
addLocal(env2, x->args[i]->name, cv.ptr());
// llvm::errs() << "codegenBinding:REF 7b\n";
llvm::SmallString<128> buf;
llvm::raw_svector_ostream ostr(buf);
ostr << x->args[i]->name->str << ":" << cv->type;
Expand Down Expand Up @@ -4229,21 +4211,11 @@ EnvPtr codegenBinding(BindingPtr x, EnvPtr env, CodegenContext* ctx)
// addLocal(env2, ((NameRef *)x->varg->type.ptr())->name, vt.ptr());
// }

// }
// llvm::errs() << "codegenBinding:REF 10\n";
// for (llvm::StringMap<ObjectPtr>::const_iterator i = env2->entries.begin(), end = env2->entries.end();
// i != end;
// ++i)
// {
// llvm::errs() << i->first().str() << "\n";
// }

return env2;
}

case FORWARD : {
// llvm::errs() << "codegenBinding:FORWARD\n";


MultiPValuePtr mpv = safeAnalyzeMulti(x->values, env, x->args.size());
MultiCValuePtr mcv = new MultiCValue();
for (unsigned i = 0; i < mpv->values.size(); ++i) {
Expand Down Expand Up @@ -4341,8 +4313,6 @@ EnvPtr codegenBinding(BindingPtr x, EnvPtr env, CodegenContext* ctx)
}

case ALIAS : {
// llvm::errs() << "codegenBinding:ALIAS\n";

ensureArity(x->args, 1);
ensureArity(x->values->exprs, 1);
EnvPtr env2 = new Env(env);
Expand Down
3 changes: 1 addition & 2 deletions test/hashmaps/main.clay
Expand Up @@ -20,7 +20,6 @@ printSortedContents(h) {

main() {
var h = HashMap[Int,Int]();

for (i in range(10))
h[i*i] = i;

Expand All @@ -36,7 +35,7 @@ main() {

var hh = HashMap[Int,Int]();
hh = h;

println();
printSortedContents(hh);

Expand Down
4 changes: 4 additions & 0 deletions test/parsing/combinators/generic/test.clay
Expand Up @@ -29,15 +29,19 @@ overload makeSeparatedListParser(#true, #true) {
testSeparatedListNotEmpty(test, #strict, #opt) {
var p = makeSeparatedListParser(#strict, #opt);
var s = String("1.12.xy");
println("blah1");
var input = iterator(s);
println("blah2");
var r = require(p(input));
println("blah3");
var expected = Vector[Int](1, 12);
expectEqual(test, "parsed", expected, r);
if (strict) {
expectEqual(test, "checking strict", String(".xy"), String(input));
} else {
expectEqual(test, "checking not strict", String("xy"), String(input));
}

}

[strict, opt]
Expand Down

0 comments on commit 1fc96ab

Please sign in to comment.