MCPcopy
hub / github.com/stemkoski/stemkoski.github.com / parse_stmt

Function parse_stmt

MathBox/mathbox-core.js:33079–33125  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

33077 }
33078
33079 function parse_stmt() {
33080 if(state[0].brace) {
33081 if(token.data !== '}') {
33082 return unexpected('expected `}`, got '+token.data)
33083 }
33084 state[0].brace = false
33085 return tokens.shift(), state.shift()
33086 }
33087 switch(token.type) {
33088 case 'eof': return state.shift()
33089 case 'keyword':
33090 switch(token.data) {
33091 case 'for': return state.unshift(forstmt());
33092 case 'if': return state.unshift(ifstmt());
33093 case 'while': return state.unshift(whilestmt());
33094 case 'do': return state.unshift(dowhilestmt());
33095 case 'break': return state.fake(mknode(BREAK, token)), tokens.shift()
33096 case 'continue': return state.fake(mknode(CONTINUE, token)), tokens.shift()
33097 case 'discard': return state.fake(mknode(DISCARD, token)), tokens.shift()
33098 case 'return': return state.unshift(returnstmt());
33099 case 'precision': return state.unshift(precision());
33100 }
33101 return state.unshift(decl(DECL_STATEMENT))
33102 case 'ident':
33103 var lookup
33104 if(lookup = state.scope.find(token.data)) {
33105 if(lookup.parent.type === 'struct') {
33106 // this is strictly untrue, you could have an
33107 // expr that starts with a struct constructor.
33108 // ... sigh
33109 return state.unshift(decl(DECL_STATEMENT))
33110 }
33111 return state.unshift(expr(';'))
33112 }
33113 case 'operator':
33114 if(token.data === '{') {
33115 state[0].brace = true
33116 var n = stmtlist()
33117 n.expecting = '}'
33118 return tokens.shift(), state.unshift(n)
33119 }
33120 if(token.data === ';') {
33121 return tokens.shift(), state.shift()
33122 }
33123 default: return state.unshift(expr(';'))
33124 }
33125 }
33126
33127 function parse_decl() {
33128 var stmt = state[0]

Callers 1

writeFunction · 0.70

Calls 4

unexpectedFunction · 0.70
mknodeFunction · 0.70
declFunction · 0.70
exprFunction · 0.70

Tested by

no test coverage detected