mirror of
https://github.com/GayPizzaSpecifications/pork.git
synced 2025-08-03 05:10:55 +00:00
frontend: implement basic scope analysis
This commit is contained in:
@ -1,7 +1,10 @@
|
||||
package gay.pizza.pork.idea
|
||||
|
||||
import com.intellij.extapi.psi.ASTWrapperPsiElement
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.tree.IElementType
|
||||
import com.intellij.psi.tree.TokenSet
|
||||
import gay.pizza.pork.ast.Node
|
||||
import gay.pizza.pork.ast.NodeType
|
||||
import gay.pizza.pork.parser.TokenType
|
||||
|
||||
|
@ -2,6 +2,7 @@ package gay.pizza.pork.idea
|
||||
|
||||
import com.intellij.lang.PsiBuilder
|
||||
import gay.pizza.pork.ast.Node
|
||||
import gay.pizza.pork.ast.NodeType
|
||||
import gay.pizza.pork.parser.ParseError
|
||||
import gay.pizza.pork.parser.ParserNodeAttribution
|
||||
import java.util.IdentityHashMap
|
||||
@ -9,14 +10,14 @@ import java.util.IdentityHashMap
|
||||
class PsiBuilderMarkAttribution(val builder: PsiBuilder) : ParserNodeAttribution() {
|
||||
private val map = IdentityHashMap<Node, Node>()
|
||||
|
||||
override fun <T : Node> guarded(block: () -> T): T {
|
||||
override fun <T : Node> guarded(type: NodeType?, block: () -> T): T {
|
||||
val marker = builder.mark()
|
||||
val result = try {
|
||||
val item = super.guarded(block)
|
||||
val item = super.guarded(type, block)
|
||||
marker.done(PorkElementTypes.elementTypeFor(item.type))
|
||||
item
|
||||
} catch (e: PsiBuilderTokenSource.BadCharacterError) {
|
||||
marker.error("Bad character.")
|
||||
marker.error("Invalid character")
|
||||
while (!builder.eof()) {
|
||||
builder.advanceLexer()
|
||||
}
|
||||
|
Reference in New Issue
Block a user