Skip to content

Commit

Permalink
Refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
DQNEO committed Aug 13, 2023
1 parent 2633fb9 commit 83fc850
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 15 deletions.
2 changes: 1 addition & 1 deletion internal/codegen/codegen.go
Original file line number Diff line number Diff line change
Expand Up @@ -1526,7 +1526,7 @@ func emitRangeMap(meta *ir.MetaForContainer) {
emitComment(2, "ForRangeStmt map Initialization\n")

// _mp = EXPRs
_emitSingleAssign(meta.ForRangeStmt.MapVar, meta.ForRangeStmt.X)
emitSingleAssign(meta.ForRangeStmt.MapVarAssign)

// if _mp == nil then exit
emitVariable(meta.ForRangeStmt.MapVar) // value of _mp
Expand Down
19 changes: 10 additions & 9 deletions internal/ir/ir.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,15 +125,16 @@ type MetaForForStmt struct {
}

type MetaForRangeStmt struct {
Tpos token.Pos
IsMap bool
LenVar *Variable
Indexvar *Variable
MapVar *Variable // map
ItemVar *Variable // map element
X MetaExpr
Key MetaExpr
Value MetaExpr
Tpos token.Pos
IsMap bool
LenVar *Variable
Indexvar *Variable
MapVar *Variable // map
ItemVar *Variable // map element
X MetaExpr
Key MetaExpr
Value MetaExpr
MapVarAssign *MetaSingleAssign
}

type MetaBranchStmt struct {
Expand Down
16 changes: 11 additions & 5 deletions internal/sema/sema.go
Original file line number Diff line number Diff line change
Expand Up @@ -1004,12 +1004,18 @@ func walkRangeStmt(s *ast.RangeStmt) *ir.MetaForContainer {
X: metaX,
}
case types.T_MAP:
mapVar := registerLocalVariable(currentFunc, ".range.map", types.Uintptr)
mapVarAssign := &ir.MetaSingleAssign{
Tpos: s.Pos(),
Lhs: mapVar,
Rhs: metaX,
}
meta.ForRangeStmt = &ir.MetaForRangeStmt{
Tpos: s.Pos(),
IsMap: true,
MapVar: registerLocalVariable(currentFunc, ".range.map", types.Uintptr),
ItemVar: registerLocalVariable(currentFunc, ".range.item", types.Uintptr),
X: metaX,
Tpos: s.Pos(),
IsMap: true,
MapVar: mapVar,
ItemVar: registerLocalVariable(currentFunc, ".range.item", types.Uintptr),
MapVarAssign: mapVarAssign,
}
default:
throw(collectionType)
Expand Down

0 comments on commit 83fc850

Please sign in to comment.