Changeset 823
- Timestamp:
- Aug 3, 2012 12:47:52 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/magnolia-eclipse/src/org/magnolialang/magnolia/typechecker/Expressions.rsc
r822 r823 202 202 203 203 tuple[AST,Env] chkInit(AST typ, AST body, f:Field(n, e), env) { 204 termPrintln("chkInit: ", n); 204 205 <ft, env> = getField(typ, body, n, env); 205 206 <e, et, env> = checkExpr(e, env); … … 393 394 try { 394 395 info = lookupDef(t, env); 396 termPrintln("chkExpr DotOp: ", n); 397 395 398 <ft, env> = getField(t, info.body, n, env); 396 399 return <DotOp(e, n), ft, env>; … … 435 438 436 439 tuple[AST,Env] getField(AST t, Body(Struct(seq(ds))), AST n, Env env) { 437 for(TypeField(VarDecl(m, fn, ft, fi)) <- ds) { 438 if(fn == n) 439 return <ft, addTokenRef(n, fn, env)>; 440 } 441 env = errorMark(env, "Unknown field \'<nameToStr(n)>\' in type \'<dispNameOf(t, env)>\'", locOf(n)); 440 if(leaf(kStr:/[0-9]+/) := n) { 441 k = toInt(kStr); 442 i = 1; 443 for(TypeField(VarDecl(m, fn, ft, fi)) <- ds) { 444 if(i == k) 445 return <ft, addTokenRef(n, VarName(fn, ft), env)>; 446 i = i + 1; 447 448 } 449 env = errorMark(env, "Unknown field #<k> in type \'<dispNameOf(t, env)>\'", locOf(n)); 450 } 451 else { 452 for(TypeField(VarDecl(m, fn, ft, fi)) <- ds) { 453 if(fn == n) 454 return <ft, addTokenRef(n, VarName(fn, ft), env)>; 455 } 456 env = errorMark(env, "Unknown field \'<nameToStr(n)>\' in type \'<dispNameOf(t, env)>\'", locOf(n)); 457 } 442 458 return <Unknown(), env>; 443 459 }
Note:
See TracChangeset
for help on using the changeset viewer.