private MidPath EmitPath(IResExp resExp, MidEmitEnv env) { var midType = EmitTypeExp(resExp.Type, env); var midExp = EmitExpRaw(resExp, env); return(env.MaybeMoveTemp <MidPath>(midExp, midType)); }
public ResElementCtorArg( IResAttributeRef attribute, IResExp value) { this.Attribute = attribute; this.Value = value; }
public ResCase( SourceRange range, IResExp value, IResExp body) { _range = range; _value = value; _body = body; }
public ResLabelExp( SourceRange range, ResLabel label, IResExp body) : base(range, label.Type) { _label = label; _body = body; }
public ResBreakExp( SourceRange range, ResLabel label, IResExp exp) : base(range, new ResBottomType()) { _label = label; _exp = exp; }
public ResAssignExp( SourceRange range, IResExp dest, IResExp src) : base(range, new ResVoidType()) { _dest = dest; _src = src; }
public ResSeqExp( SourceRange range, IResExp head, IResExp tail) : base(range, new ResBottomType()) { _head = head; _tail = tail; }
public ResMemberCategoryGroupRef( SourceRange range, IResExp obj, ResMemberCategoryGroupSpec spec) { _range = range; _obj = obj; _spec = spec; }
public ResSwitchExp( SourceRange range, IResExp value, IEnumerable <ResCase> cases) : base(range, new ResVoidType()) { _value = value; _cases = cases.ToArray(); }
public ResAttributeFetch( SourceRange range, IResTypeExp type, IResExp obj, IResExp attribute) : base(range, type) { _obj = obj; _attribute = attribute; }
private MidExp EmitLocalExp( IResExp resExp, MidEmitEnv env, MidElementDecl element = null) { var localEnv = new MidLocalEmitEnv(env, _identifiers, element, _exps); var midExp = EmitExpRaw(resExp, localEnv); return(localEnv.Wrap(midExp)); }
public ResLetExp( SourceRange range, IResVarDecl var, IResExp value, IResExp body) : base(range, body.Type) { _var = var; _value = value; _body = body; }
public ResForExp( SourceRange range, IResVarDecl var, IResExp sequence, IResExp body) : base(range, new ResVoidType()) { _var = var; _sequence = sequence; _body = body; }
public ResIfExp( SourceRange range, IResExp condition, IResExp thenExp, IResExp elseExp) : base(range, thenExp.Type) { _condition = condition; _thenExp = thenExp; _elseExp = elseExp; }
public ResMemberBind( SourceRange range, IResExp obj, IResMemberSpec memberSpec) { _range = range; _obj = obj; _memberSpec = memberSpec; _subst = new Substitution( memberSpec.Container.MemberTerm.Subst ); // \todo: Need to ensure "obj" is clone-able... // \todo: Need to iteratively re-subst... _subst.Insert( memberSpec.Container.ThisParameter, (r) => obj); }
private MidExp EmitAttrExp( MidElementDecl midElement, MidType midType, IResExp resExp, MidEmitEnv env) { var savedElement = _currentElement; _currentElement = midElement; var result = EmitLocalExp(resExp, env, midElement); _currentElement = savedElement; return(result); }
public ResMemberBind( SourceRange range, IResExp obj, IResMemberSpec memberSpec) { _range = range; _obj = obj; _memberSpec = memberSpec; _subst = new Substitution(memberSpec.Container.MemberTerm.Subst); // \todo: Need to ensure "obj" is clone-able... // \todo: Need to iteratively re-subst... _subst.Insert( memberSpec.Container.ThisParameter, (r) => obj); }
private MidVal EmitValToElementImpl( IResExp resExp, MidElementDecl element, MidEmitEnv parentEnv) { var midExp = EmitLocalExp(resExp, parentEnv, element); if (midExp is MidVal) { return((MidVal)midExp); } var midType = EmitTypeExp(resExp.Type, parentEnv); var attr = element.CacheAttr( midExp, midType); return(_exps.AttributeRef(resExp.Range, attr)); }
private MidVal EmitValToElement( IResExp resExp, MidElementDecl element, MidEmitEnv parentEnv) { if (element == _currentElement) { return(EmitVal(resExp, parentEnv)); } var savedElement = _currentElement; _currentElement = element; var result = EmitValToElementImpl( resExp, element, parentEnv); _currentElement = savedElement; return(result); }
public ResLabelExp( SourceRange range, ResLabel label, IResExp body ) : base(range, label.Type) { _label = label; _body = body; }
public IResMemberCategoryGroupRef Bind(SourceRange range, IResExp obj) { return(new ResMemberCategoryGroupRef(range, obj, this)); }
private MidExp EmitExpRaw(IResExp exp, MidEmitEnv env) { return(EmitExpImpl((dynamic)exp, env)); }
public ResGenericValueArg( IResExp value) { _value = value; }
public IResMemberRef Bind(SourceRange range, IResExp obj) { return _decl.MakeRef( range, new ResMemberBind(range, obj, this)); }
public IResMemberRef Bind(SourceRange range, IResExp obj) { return(_decl.MakeRef( range, new ResMemberBind(range, obj, this))); }