[SCM] Lisaac compiler branch, stable, updated. lisaac-0.12-468-g4b0f42f

Damien Bouvarel dams.bouvarel at wanadoo.fr
Sat Sep 5 16:02:27 UTC 2009


The following commit has been merged in the stable branch:
commit 4b0f42f799cc9a7d119118ff17abd3fb019fc174
Author: Damien Bouvarel <dams.bouvarel at wanadoo.fr>
Date:   Sat Sep 5 18:01:38 2009 +0200

    fix bugs. the plugin should be able to read the compiler src as an eclipse project

diff --git a/editor/eclipse/META-INF/MANIFEST.MF b/editor/eclipse/META-INF/MANIFEST.MF
index 5df0e1d..d56f0e5 100644
--- a/editor/eclipse/META-INF/MANIFEST.MF
+++ b/editor/eclipse/META-INF/MANIFEST.MF
@@ -1,7 +1,7 @@
 Manifest-Version: 1.0
 Bundle-ManifestVersion: 2
 Bundle-SymbolicName: org.lisaac.ldt;singleton:=true
-Bundle-Version: 1.1.5
+Bundle-Version: 1.1.6
 Bundle-Activator: org.lisaac.ldt.LisaacPlugin
 Bundle-Vendor: %Bundle-Vendor.0
 Require-Bundle: org.eclipse.ui,
diff --git a/editor/eclipse/src/org/lisaac/ldt/builder/LisaacChangeListener.java b/editor/eclipse/src/org/lisaac/ldt/builder/LisaacChangeListener.java
index ddb9125..a13a510 100644
--- a/editor/eclipse/src/org/lisaac/ldt/builder/LisaacChangeListener.java
+++ b/editor/eclipse/src/org/lisaac/ldt/builder/LisaacChangeListener.java
@@ -13,18 +13,20 @@ public class LisaacChangeListener implements IResourceChangeListener {
 	public void resourceChanged(IResourceChangeEvent event) {
 		IResourceDelta delta = event.getDelta();
 
-		IResource resource = delta.getResource(); 
-		if (resource != null) {
-			if (resource instanceof IWorkspaceRoot) {
-				delta = (IResourceDelta) (delta.getAffectedChildren())[0];// TODO go deeper in the delta
-				resource = delta.getResource(); 
-			}
+		if (delta != null) {
+			IResource resource = delta.getResource(); 
 			if (resource != null) {
-				IProject project = (IProject) resource.getProject();
-				LisaacModel model = LisaacModel.getModel(project);
+				if (resource instanceof IWorkspaceRoot) {
+					delta = (IResourceDelta) (delta.getAffectedChildren())[0];// TODO go deeper in the delta
+					resource = delta.getResource(); 
+				}
+				if (resource != null) {
+					IProject project = (IProject) resource.getProject();
+					LisaacModel model = LisaacModel.getModel(project);
 
-				if (model != null) {
-					model.setCompiled(false);
+					if (model != null) {
+						model.setCompiled(false);
+					}
 				}
 			}
 		}
diff --git a/editor/eclipse/src/org/lisaac/ldt/editors/LisaacPartitionScanner.java b/editor/eclipse/src/org/lisaac/ldt/editors/LisaacPartitionScanner.java
index 4a51bca..ae54ee5 100644
--- a/editor/eclipse/src/org/lisaac/ldt/editors/LisaacPartitionScanner.java
+++ b/editor/eclipse/src/org/lisaac/ldt/editors/LisaacPartitionScanner.java
@@ -20,17 +20,17 @@ public class LisaacPartitionScanner extends RuleBasedPartitionScanner {
 		IToken string = new Token(LISAAC_STRING);
 		IToken external = new Token(LISAAC_EXTERNAL);
 		
-		IPredicateRule[] rules = new IPredicateRule[4];
-
-		rules[0] = new MultiLineRule("/*", "*/", comment);
-		rules[1] = new EndOfLineRule("//", comment);
-
-		rules[2] = new MultiLineRule("\"", "\"", string);
-		rules[3] = new MultiLineRule("`", "`", external);
+		IPredicateRule[] rules = new IPredicateRule[6];
 
+		rules[0] = new MultiLineRule("\"", "\"", string);
+		rules[1] = new MultiLineRule("`", "`", external);
+		
+		rules[2] = new MultiLineRule("/*", "*/", comment);
+		rules[3] = new EndOfLineRule("//", comment);
+		
 		// avoid processing comment inside lisaac strings
-		//rules[2] = new MultiLineRule("\"", "\"", Token.UNDEFINED, '\0', true);
-		//rules[3] = new SingleLineRule("`", "`", Token.UNDEFINED, '\0', true);
+		rules[4] = new MultiLineRule("\"", "\"", string, '\0', true);
+		rules[5] = new SingleLineRule("`", "`", external, '\0', true);
 		
 		setPredicateRules(rules);
 	}
diff --git a/editor/eclipse/src/org/lisaac/ldt/editors/LisaacTextHover.java b/editor/eclipse/src/org/lisaac/ldt/editors/LisaacTextHover.java
index 1ffb8dc..dbe977d 100644
--- a/editor/eclipse/src/org/lisaac/ldt/editors/LisaacTextHover.java
+++ b/editor/eclipse/src/org/lisaac/ldt/editors/LisaacTextHover.java
@@ -39,6 +39,10 @@ public class LisaacTextHover implements ITextHover, ITextHoverExtension {
 				return null;
 			}
 			
+			if (model == null) {
+				return null;
+			}
+			
 			String text = textViewer.getDocument().get(hoverRegion.getOffset(), hoverRegion.getLength());
 			if (LisaacScanner.isPrototypeIdentifier(text)) {
 				// get prototype info
diff --git a/editor/eclipse/src/org/lisaac/ldt/launch/LaunchConfigurationTab.java b/editor/eclipse/src/org/lisaac/ldt/launch/LaunchConfigurationTab.java
index b426bbf..7bfb35d 100644
--- a/editor/eclipse/src/org/lisaac/ldt/launch/LaunchConfigurationTab.java
+++ b/editor/eclipse/src/org/lisaac/ldt/launch/LaunchConfigurationTab.java
@@ -334,12 +334,9 @@ public class LaunchConfigurationTab extends AbstractLaunchConfigurationTab {
 								item.setText(2, methodComment);
 
 								if (method.getName().compareTo(ILisaacModel.slot_debug_mode) == 0) {
-									if (getLaunchConfigurationDialog().getMode().compareTo("debug") == 0) {
-										item.setChecked(true);
-									} else {
-										item.setChecked(false);
-									}
-								}
+									item.setChecked(true);
+									item.setText(1, getLaunchConfigurationDialog().getMode());
+								} 
 							}
 						}
 					}
diff --git a/editor/eclipse/src/org/lisaac/ldt/model/AbstractLisaacParser.java b/editor/eclipse/src/org/lisaac/ldt/model/AbstractLisaacParser.java
index 45af489..058d2bc 100644
--- a/editor/eclipse/src/org/lisaac/ldt/model/AbstractLisaacParser.java
+++ b/editor/eclipse/src/org/lisaac/ldt/model/AbstractLisaacParser.java
@@ -495,7 +495,7 @@ public class AbstractLisaacParser {
 					Integer integer = Integer.valueOf(string_tmp, 16);
 					lastInteger = integer.intValue();
 				} catch (Exception e) {
-					System.out.println("Warning readInteger : "+e);// FIXME hex string
+					//System.out.println("Warning readInteger : "+e);// FIXME hex string
 					lastInteger = 0;
 				}
 				position++;
@@ -736,7 +736,6 @@ public class AbstractLisaacParser {
 	//-- string -> '\"' ascii_string '\"'
 	public boolean readString() {
 		boolean result=false;
-		//	int old_pos;
 
 		if (readSpace() && lastCharacter() == '\"') {
 			//	old_pos = position;
@@ -755,7 +754,7 @@ public class AbstractLisaacParser {
 				position = position+1;
 				lastString = getString(string_tmp);
 				result = true;
-			} else {
+			} else { 
 				position = begin_position;
 				reporter.syntaxError("Unterminated string constant.", getPosition());
 			}
diff --git a/editor/eclipse/src/org/lisaac/ldt/model/ILisaacModel.java b/editor/eclipse/src/org/lisaac/ldt/model/ILisaacModel.java
index 6ce8e63..f6c21b2 100644
--- a/editor/eclipse/src/org/lisaac/ldt/model/ILisaacModel.java
+++ b/editor/eclipse/src/org/lisaac/ldt/model/ILisaacModel.java
@@ -5,13 +5,6 @@ import org.lisaac.ldt.builder.ILisaacErrorHandler;
 import org.lisaac.ldt.model.lip.LIP;
 
 public interface ILisaacModel {
-
-	final String[] keywords = new String[] { "Section", "Public",
-		"Private", "Inherit", "Header", "Insert", "Mapping", "Interrupt",
-		"External", "Directory", 
-		"Expanded", "Strict",
-		"Left", "Right",
-		"Self",};
 	
 	final String inherit_shared             = "Shared";
 	final String inherit_shared_expanded    = "Shared Expanded";
@@ -79,13 +72,23 @@ public interface ILisaacModel {
 	final String variable_void          = "VOID";
 	final String variable_self          = "Self";
 	
+	
+	final String[] keywords = new String[] { keyword_section, section_public,
+			section_private, section_inherit, section_header, section_insert,
+			section_mapping, section_interrupt,
+			section_external, section_directory, 
+			keyword_expanded, keyword_strict,
+			keyword_left, keyword_right,
+			variable_self, keyword_old, keyword_result};
+	
+	
 	// lip
 	final String slot_lip    = "lip";
 	final String slot_if    = "if";
 	final String slot_else  = "else";
 	final String slot_print = "print";
 	
-	final String slot_debug_mode = "debug_mode";
+	final String slot_debug_mode = "run_mode";
 	
 	ILisaacErrorHandler getReporter();
 	AliasString getAliasString();
diff --git a/editor/eclipse/src/org/lisaac/ldt/model/LisaacModel.java b/editor/eclipse/src/org/lisaac/ldt/model/LisaacModel.java
index b4055a7..353afc3 100644
--- a/editor/eclipse/src/org/lisaac/ldt/model/LisaacModel.java
+++ b/editor/eclipse/src/org/lisaac/ldt/model/LisaacModel.java
@@ -8,7 +8,6 @@ import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceVisitor;
-import org.eclipse.core.resources.ResourceAttributes;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
diff --git a/editor/eclipse/src/org/lisaac/ldt/model/LisaacParser.java b/editor/eclipse/src/org/lisaac/ldt/model/LisaacParser.java
index cf72e27..cca09f2 100644
--- a/editor/eclipse/src/org/lisaac/ldt/model/LisaacParser.java
+++ b/editor/eclipse/src/org/lisaac/ldt/model/LisaacParser.java
@@ -131,7 +131,7 @@ public class LisaacParser extends AbstractLisaacParser {
 					return null;
 				}
 				if (isSection) {
-					if (! (t instanceof TypeSimple)) {
+					if (! (t instanceof TypeSimple) && ! (t instanceof TypeSelf)) {
 						reporter.syntaxError("For a section, the prototype name only (without '('...')').", getLine());
 						return null;
 					}
@@ -378,7 +378,7 @@ public class LisaacParser extends AbstractLisaacParser {
 			if (lastComment != null && lastComment.length() > 0) {
 				lastSlot.setComment(lastComment);
 			}
-			if (lastSection.isInheritOrInsert()) {
+			if (lastComment != null && lastSection.isInheritOrInsert()) {
 				// Add parent slot
 				Slot s = prototype.getParentSlot(lastSlot.getName());
 				if (s != null) {
diff --git a/editor/eclipse/src/org/lisaac/ldt/model/items/Prototype.java b/editor/eclipse/src/org/lisaac/ldt/model/items/Prototype.java
index ac95e56..500dbe0 100644
--- a/editor/eclipse/src/org/lisaac/ldt/model/items/Prototype.java
+++ b/editor/eclipse/src/org/lisaac/ldt/model/items/Prototype.java
@@ -335,6 +335,12 @@ public class Prototype {
 				invBracketLevel--;
 			}
 
+			// strings 
+			if (c == '\"' || c == '\'' || c == '`') {
+				offset = unreadString(c, offset, source);
+				continue;
+			} 
+			
 			// ok, we're not in nested statements
 			if (bracketLevel == 0 && invBracketLevel == 0) {
 				if (c == ';' || c == '.') {
@@ -399,11 +405,6 @@ public class Prototype {
 					}
 					break;
 				}
-				// strings 
-				if (c == '\"' || c == '\'' || c == '`') {
-					offset = unreadString(c, offset, source);
-					continue;
-				} 
 			}
 			offset--;
 		}
@@ -497,7 +498,11 @@ public class Prototype {
 				offset = offset - 2;
 				break;
 			}
-			offset--;
+			if (c == '\"' || c == '\'' || c == '`') {
+				offset = unreadString(c, offset, source);
+				continue;
+			}
+			offset--; 
 		}
 		if (offset < 0) {
 			offset = 0;
diff --git a/editor/eclipse/src/org/lisaac/ldt/wizards/NewProjectWizard.java b/editor/eclipse/src/org/lisaac/ldt/wizards/NewProjectWizard.java
index 0291659..ce37a5e 100644
--- a/editor/eclipse/src/org/lisaac/ldt/wizards/NewProjectWizard.java
+++ b/editor/eclipse/src/org/lisaac/ldt/wizards/NewProjectWizard.java
@@ -1,5 +1,6 @@
 package org.lisaac.ldt.wizards;
 
+import java.awt.GridLayout;
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
@@ -18,6 +19,11 @@ import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.dialogs.WizardNewProjectCreationPage;
@@ -40,15 +46,17 @@ public class NewProjectWizard extends Wizard implements INewWizard {
 	public boolean performFinish() {
 		final String name;
 		final IPath path;
+		final boolean genereSrc;
 		IRunnableWithProgress op = null;
 		try {
 			name = mainPage.getProjectName();
 			path = mainPage.getLocationPath();
-			//lisaacPath = mainPage.getLisaacPath();
+			genereSrc = mainPage.generateSrc();
+
 			op = new IRunnableWithProgress() {
 				public void run(IProgressMonitor monitor) throws InvocationTargetException {
 					try {						
-						doFinish(name, path, monitor);
+						doFinish(name, path, genereSrc, monitor);
 					} catch (CoreException e) {
 						throw new InvocationTargetException(e);
 					} finally {
@@ -72,7 +80,7 @@ public class NewProjectWizard extends Wizard implements INewWizard {
 		return true;
 	}
 
-	private void doFinish(String projectName, IPath nomRep, IProgressMonitor monitor)
+	private void doFinish(String projectName, IPath nomRep, boolean genereSrc, IProgressMonitor monitor)
 	throws CoreException
 	{
 		monitor.beginTask("Project Creation " + projectName, 4); //$NON-NLS-1$
@@ -114,22 +122,23 @@ public class NewProjectWizard extends Wizard implements INewWizard {
 			// create make file for project
 			IFile lipFile = project.getFile("make.lip"); //$NON-NLS-1$
 			if (! lipFile.exists()) {
-				lipFile.create(new ByteArrayInputStream(getLipStream(project)), false, monitor);
+				lipFile.create(new ByteArrayInputStream(getLipStream(project, genereSrc)), false, monitor);
 			}
 
 			// create default folder & files in project
-			IFolder src = project.getFolder("src"); //$NON-NLS-1$
-			if (! src.exists()) {
-				src.create(false, true, monitor);
-				src.setPersistentProperty(
-						new QualifiedName("", LisaacResourceDecorator.SOURCE_FOLDER_PROPERTY),
-				"true");
-			}
-
-			monitor.worked(1);
-			IFile mainPrototype = src.getFile(projectName.toLowerCase()+".li"); //$NON-NLS-1$
-			if (! mainPrototype.exists()) {
-				mainPrototype.create(new ByteArrayInputStream(getMainPrototypeStream(projectName)), false, monitor);
+			if (genereSrc) {
+				IFolder src = project.getFolder("src"); //$NON-NLS-1$
+				if (! src.exists()) {
+					src.create(false, true, monitor);
+					src.setPersistentProperty(
+							new QualifiedName("", LisaacResourceDecorator.SOURCE_FOLDER_PROPERTY),
+					"true");
+				}
+				monitor.worked(1);
+				IFile mainPrototype = src.getFile(projectName.toLowerCase()+".li"); //$NON-NLS-1$
+				if (! mainPrototype.exists()) {
+					mainPrototype.create(new ByteArrayInputStream(getMainPrototypeStream(projectName)), false, monitor);
+				}
 			}
 			IFolder bin = project.getFolder("bin"); //$NON-NLS-1$
 			if (! bin.exists()) {
@@ -170,7 +179,7 @@ public class NewProjectWizard extends Wizard implements INewWizard {
 		return contents.getBytes();
 	}
 
-	public byte[] getLipStream(IProject project) throws IOException {
+	public byte[] getLipStream(IProject project, boolean genereSrc) throws IOException {
 		String contents = "//\n// `"+project.getName()+"`  LIsaac Project file\n//"; //$NON-NLS-1$ //$NON-NLS-2$
 		contents += "\nSection Inherit\n\n"; //$NON-NLS-1$
 		contents += "  + parent:STRING;\n"; //$NON-NLS-1$
@@ -179,7 +188,11 @@ public class NewProjectWizard extends Wizard implements INewWizard {
 		contents += "  - project_src_path <- \n"; //$NON-NLS-1$
 		contents += "  // Define the project path for source code.\n"; //$NON-NLS-1$
 		contents += "  (\n"; //$NON-NLS-1$
-		contents += "    path (project_root + \"src/\");\n"; //$NON-NLS-1$
+		if (genereSrc) {
+			contents += "    path (project_root + \"src/\");\n"; //$NON-NLS-1$
+		} else {
+			contents += "    path project_root;\n"; //$NON-NLS-1$
+		}
 		contents += "  );\n\n"; //$NON-NLS-1$
 		contents += "  - front_end <- \n"; //$NON-NLS-1$
 		contents += "  // Executed by compiler, before compilation step.\n"; //$NON-NLS-1$
@@ -188,10 +201,14 @@ public class NewProjectWizard extends Wizard implements INewWizard {
 		contents += "    general_front_end;\n"; //$NON-NLS-1$
 		contents += "  );\n"; //$NON-NLS-1$
 		contents +=	"\nSection Public\n\n"; //$NON-NLS-1$
-		contents += "  - debug_mode <- \n"; //$NON-NLS-1$
-		contents += "  // Run in Debug Mode.\n"; //$NON-NLS-1$
+		contents += "  - run_mode m:STRING <- \n"; //$NON-NLS-1$
+		contents += "  // Select Run Mode.\n"; //$NON-NLS-1$
 		contents += "  (\n"; //$NON-NLS-1$
-		contents += "    debug 15; // default level [1-20]\n"; //$NON-NLS-1$
+		contents += "    (m = \"run\").if {\n"; //$NON-NLS-1$			
+		contents += "      no_debug;\n"; //$NON-NLS-1$
+		contents += "    } else {\n"; //$NON-NLS-1$		
+		contents += "      debug 15; // default level [1-20]\n"; //$NON-NLS-1$
+		contents += "    };\n"; //$NON-NLS-1$	
 		contents += "  );\n\n"; //$NON-NLS-1$
 		contents += "  - clean <- \n"; //$NON-NLS-1$
 		contents += "  // Clean project.\n"; //$NON-NLS-1$
@@ -214,11 +231,30 @@ public class NewProjectWizard extends Wizard implements INewWizard {
 
 class NewProjectWizardPage extends WizardNewProjectCreationPage {
 
+	Button genereSrc;
+
 	NewProjectWizardPage(String pageName) {
 		super(pageName);
 		setTitle(pageName);
 		setDescription(LisaacMessages.getString("NewProjectWizard_48")); 
 	}
+
+	public void createControl(Composite parent) {
+		super.createControl(parent);
+
+		Composite composite = (Composite) getControl();
+
+		genereSrc = new Button(composite, SWT.CHECK);
+		genereSrc.setText("Generate src files");
+		genereSrc.setSelection(true);
+	}
+
+	public boolean generateSrc() {
+		if (! genereSrc.isDisposed()) {
+			return genereSrc.getSelection();
+		}
+		return true;
+	}
 }
 /*
 class LicenseWizardPage extends WizardPage {

-- 
Lisaac compiler



More information about the Lisaac-commits mailing list