Changeset 196541 in webkit for trunk/Source/JavaScriptCore/offlineasm/parser.rb
- Timestamp:
- Feb 12, 2016, 6:37:19 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/offlineasm/parser.rb
r194531 r196541 1 # Copyright (C) 2011 Apple Inc. All rights reserved.1 # Copyright (C) 2011, 2016 Apple Inc. All rights reserved. 2 2 # 3 3 # Redistribution and use in source and binary forms, with or without … … 29 29 require "self_hash" 30 30 31 class SourceFile 32 @@fileNames = [] 33 34 attr_reader :name, :fileNumber 35 36 def SourceFile.outputDotFileList(outp) 37 @@fileNames.each_index { 38 | index | 39 outp.puts "\".file #{index+1} \\\"#{@@fileNames[index]}\\\"\\n\"" 40 } 41 end 42 43 def initialize(fileName) 44 @name = Pathname.new(fileName) 45 pathName = "#{@name.realpath}" 46 fileNumber = @@fileNames.index(pathName) 47 if not fileNumber 48 @@fileNames << pathName 49 fileNumber = @@fileNames.length 50 else 51 fileNumber += 1 # File numbers are 1 based 52 end 53 @fileNumber = fileNumber 54 end 55 end 56 31 57 class CodeOrigin 32 attr_reader : fileName, :lineNumber33 34 def initialize( fileName, lineNumber)35 @ fileName = fileName58 attr_reader :lineNumber 59 60 def initialize(sourceFile, lineNumber) 61 @sourceFile = sourceFile 36 62 @lineNumber = lineNumber 37 63 end 38 64 65 def fileName 66 @sourceFile.name 67 end 68 69 def debugDirective 70 $emitWinAsm ? nil : "\".loc #{@sourceFile.fileNumber} #{lineNumber}\\n\"" 71 end 72 39 73 def to_s 40 74 "#{fileName}:#{lineNumber}" … … 118 152 # 119 153 120 def lex(str, fileName) 121 fileName = Pathname.new(fileName) 154 def lex(str, file) 122 155 result = [] 123 156 lineNumber = 1 … … 139 172 # enableInstrAnnotations is not enabled. 140 173 if annotation 141 result << Annotation.new(CodeOrigin.new(file Name, lineNumber),174 result << Annotation.new(CodeOrigin.new(file, lineNumber), 142 175 annotationType, annotation) 143 176 annotation = nil 144 177 end 145 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&)178 result << Token.new(CodeOrigin.new(file, lineNumber), $&) 146 179 lineNumber += 1 147 180 when /\A[a-zA-Z]([a-zA-Z0-9_.]*)/ 148 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&)181 result << Token.new(CodeOrigin.new(file, lineNumber), $&) 149 182 when /\A\.([a-zA-Z0-9_]*)/ 150 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&)183 result << Token.new(CodeOrigin.new(file, lineNumber), $&) 151 184 when /\A_([a-zA-Z0-9_]*)/ 152 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&)185 result << Token.new(CodeOrigin.new(file, lineNumber), $&) 153 186 when /\A([ \t]+)/ 154 187 # whitespace, ignore … … 157 190 next 158 191 when /\A0x([0-9a-fA-F]+)/ 159 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&.hex.to_s)192 result << Token.new(CodeOrigin.new(file, lineNumber), $&.hex.to_s) 160 193 when /\A0([0-7]+)/ 161 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&.oct.to_s)194 result << Token.new(CodeOrigin.new(file, lineNumber), $&.oct.to_s) 162 195 when /\A([0-9]+)/ 163 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&)196 result << Token.new(CodeOrigin.new(file, lineNumber), $&) 164 197 when /\A::/ 165 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&)198 result << Token.new(CodeOrigin.new(file, lineNumber), $&) 166 199 when /\A[:,\(\)\[\]=\+\-~\|&^*]/ 167 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&)200 result << Token.new(CodeOrigin.new(file, lineNumber), $&) 168 201 when /\A".*"/ 169 result << Token.new(CodeOrigin.new(file Name, lineNumber), $&)170 else 171 raise "Lexer error at #{CodeOrigin.new(file Name, lineNumber).to_s}, unexpected sequence #{str[0..20].inspect}"202 result << Token.new(CodeOrigin.new(file, lineNumber), $&) 203 else 204 raise "Lexer error at #{CodeOrigin.new(file, lineNumber).to_s}, unexpected sequence #{str[0..20].inspect}" 172 205 end 173 206 whitespaceFound = false … … 778 811 779 812 def parseData(data, fileName) 780 parser = Parser.new(data, fileName)813 parser = Parser.new(data, SourceFile.new(fileName)) 781 814 parser.parseSequence(nil, "") 782 815 end … … 787 820 788 821 def parseHash(fileName) 789 parser = Parser.new(IO::read(fileName), fileName)822 parser = Parser.new(IO::read(fileName), SourceFile.new(fileName)) 790 823 fileList = parser.parseIncludes(nil, "") 791 824 fileListHash(fileList)
Note:
See TracChangeset
for help on using the changeset viewer.