fix timestamp compiler

pull/5370/head
filip mertens 1 year ago
parent f735ecd8b7
commit fb649391e2
  1. 9
      apps/remix-ide/src/app/plugins/parser/services/code-parser-compiler.ts
  2. 5
      apps/remix-ide/src/app/plugins/parser/services/code-parser-gas-service.ts
  3. 27
      libs/remix-solidity/src/compiler/compiler.ts
  4. 2
      libs/remix-solidity/src/compiler/types.ts
  5. 18
      libs/remix-ui/editor/src/lib/providers/quickfixes.ts

@ -99,21 +99,24 @@ export default class CodeParserCompiler {
await this.clearDecorators(result.getSourceCode().sources)
}
if (!data.sources) return
if (data.sources && Object.keys(data.sources).length === 0) return
this.plugin.compilerAbstract = new CompilerAbstract('soljson', data, source, input)
this.errorState = false
this.plugin.nodeIndex = {
declarations: {},
flatReferences: {},
nodesPerFile: {},
}
this.plugin._buildIndex(data, source)
// cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository
this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult)
const extractedFiledNodes = this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult)
if(extractedFiledNodes) {
this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = extractedFiledNodes
}
await this.plugin.gasService.showGasEstimates()
this.plugin.emit('astFinished')
}

@ -42,7 +42,10 @@ export default class CodeParserGasService {
}
this.plugin.currentFile = await this.plugin.call('fileManager', 'file')
// cast from the remix-plugin interface to the solidity one. Should be fixed when remix-plugin move to the remix-project repository
this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = await this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult)
const extractedFiledNodes = await this.plugin._extractFileNodes(this.plugin.currentFile, this.plugin.compilerAbstract as unknown as lastCompilationResult)
if(extractedFiledNodes) {
this.plugin.nodeIndex.nodesPerFile[this.plugin.currentFile] = extractedFiledNodes
}
const gasEstimates = await this.getGasEstimates(this.plugin.currentFile)

@ -49,6 +49,7 @@ export class Compiler {
if (success && this.state.compilationStartTime) {
this.event.trigger('compilationDuration', [(new Date().getTime()) - this.state.compilationStartTime])
}
console.log('compilationStartTime to null', this.state.compilationStartTime, data)
this.state.compilationStartTime = null
})
@ -81,12 +82,16 @@ export class Compiler {
* @param missingInputs missing import file path list
*/
internalCompile(files: Source, missingInputs?: string[]): void {
internalCompile(files: Source, missingInputs?: string[], timeStamp?: number): void {
if(timeStamp != this.state.compilationStartTime && this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger ) {
console.log('aborting compilation', timeStamp, this.state.compilationStartTime)
return
}
this.gatherImports(files, missingInputs, (error, input) => {
if (error) {
this.state.lastCompilationResult = null
this.event.trigger('compilationFinished', [false, { error: { formattedMessage: error, severity: 'error' } }, files, input, this.state.currentVersion])
} else if (this.state.compileJSON && input) { this.state.compileJSON(input) }
} else if (this.state.compileJSON && input) { this.state.compileJSON(input, timeStamp) }
})
}
@ -99,8 +104,9 @@ export class Compiler {
compile(files: Source, target: string): void {
this.state.target = target
this.state.compilationStartTime = new Date().getTime()
console.log('compiling ' + target + '...', files, this.state.compilationStartTime)
this.event.trigger('compilationStarted', [])
this.internalCompile(files)
this.internalCompile(files, null, this.state.compilationStartTime)
}
/**
@ -157,7 +163,7 @@ export class Compiler {
* @param source Source
*/
onCompilationFinished(data: CompilationResult, missingInputs?: string[], source?: SourceWithTarget, input?: string, version?: string): void {
onCompilationFinished(data: CompilationResult, missingInputs?: string[], source?: SourceWithTarget, input?: string, version?: string, timeStamp?: number): void {
let noFatalErrors = true // ie warnings are ok
const checkIfFatalError = (error: CompilationError) => {
@ -173,7 +179,7 @@ export class Compiler {
this.event.trigger('compilationFinished', [false, data, source, input, version])
} else if (missingInputs !== undefined && missingInputs.length > 0 && source && source.sources) {
// try compiling again with the new set of inputs
this.internalCompile(source.sources, missingInputs)
this.internalCompile(source.sources, missingInputs, timeStamp)
} else {
data = this.updateInterface(data)
if (source) {
@ -183,6 +189,7 @@ export class Compiler {
source: source
}
}
console.log('compilationFinished ', timeStamp, this.state.compilationStartTime)
this.event.trigger('compilationFinished', [true, data, source, input, version])
}
}
@ -291,7 +298,9 @@ export class Compiler {
this.state.worker.addEventListener('message', (msg: Record<'data', MessageFromWorker>) => {
const data: MessageFromWorker = msg.data
console.log('incoming message', data.timestamp, data)
if (this.state.compilerRetriggerMode == CompilerRetriggerMode.retrigger && data.timestamp !== this.state.compilationStartTime) {
console.log('dropping message', data.timestamp, this.state.compilationStartTime)
return
}
switch (data.cmd) {
@ -312,7 +321,7 @@ export class Compiler {
sources = jobs[data.job].sources
delete jobs[data.job]
}
this.onCompilationFinished(result, data.missingInputs, sources, data.input, this.state.currentVersion)
this.onCompilationFinished(result, data.missingInputs, sources, data.input, this.state.currentVersion, data.timestamp)
}
break
}
@ -325,7 +334,7 @@ export class Compiler {
this.onCompilationFinished({ error: { formattedMessage } })
})
this.state.compileJSON = (source: SourceWithTarget) => {
this.state.compileJSON = (source: SourceWithTarget, timeStamp: number) => {
if (source && source.sources) {
const { optimize, runs, evmVersion, language, useFileConfiguration, configFileContent } = this.state
jobs.push({ sources: source })
@ -342,12 +351,12 @@ export class Compiler {
return
}
console.log('posting message with timestamp ', this.state.compilationStartTime, source)
this.state.worker.postMessage({
cmd: 'compile',
job: jobs.length - 1,
input: input,
timestamp: this.state.compilationStartTime
timestamp: timeStamp
})
}
}

@ -160,7 +160,7 @@ export enum CompilerRetriggerMode {
}
export interface CompilerState {
compileJSON: ((input: SourceWithTarget) => void) | null,
compileJSON: ((input: SourceWithTarget, timeStamp?: number) => void) | null,
worker: any,
currentVersion: string| null| undefined,
compilerLicense: string| null

@ -170,5 +170,21 @@ export default {
title: "Add 'calldata' to param",
message: ' calldata '
}
],
'SyntaxError: No visibility specified. Did you intend to add "external': [
{
id: 12,
title: "Add visibility 'external'",
message: 'external ',
nodeType: 'FunctionDefinition'
}
],
'DeclarationError: Receive ether function must be payable, but is "nonpayable".': [
{
id: 13,
title: "Make function 'payable'",
message: 'payable ',
nodeType: 'FunctionDefinition'
}
]
}
}
Loading…
Cancel
Save